#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

int main()
{
    // 测试软件条件产生信号 - 管道读端不读并且关闭读端，写端进程会发生什么情况呢？
    // 利用匿名管道进行验证
    int pipefd[2];

    if (pipe(pipefd) < 0)
    {
        perror("pipe:");
        exit(1);
    }

    pid_t id = fork();
    if (id == 0)
    {
        // 子进程
        while (true)
        {
            close(pipefd[0]);  // 关闭读端
            char* buffer[1024] = {0};
            scanf("%s", buffer);
            write(pipefd[1], buffer, 1024);
        }
        exit(1);
    }
    // 父进程
    close(pipefd[1]);  // 关闭写端
    char* buffer[1024] = {0};
    for (int i = 0; i < 5; ++i)
    {
        read(pipefd[0], buffer, 1024);
        cout << "服务器端:";
        printf("%s\n", buffer);
    }
    cout << "读取数据次数结束，关闭读端检测子进程" << endl;
    close(pipefd[0]);  // 关闭读端
    int status;
    if (wait(&status)>0) cout << id << "进程退出信号:" << (status & 0x7F) << endl;  // 13号信号
    else perror("wait:");
    
    return 0;
}